// 加载 mongoose 模块
var mongoose = require('mongoose');
// 声明一个 movieSchema 调用 mongoose 的 Schema 方法，在方法里传入一个对象，对象里面存放跟电影有关的字段以及它们的类型
var MovieSchema = new mongoose.Schema({
   doctor: String,
   title: String,
   language: String,
   country: String,
   summary: String,
   flash: String,
   poster: String,
   year: Number,
   // meta 里面存放的是在录入数据或者更新数据的时间记录
   meta: {
      createAt: {
         type: Date,
         default: Date.now()
      },
      updateAt: {
         type: Date,
         default: Date.now()
      }
   }
});

// 为模式添加一个方法，这个 presave 是每次在调用数据之前都会调用这个方法
MovieSchema.pre('save', function(next) {
   // 判断数据是否是新加的，如果是新加的就把它创建的时间和更新的时间设置为当前时间，如果这个数据已经有了，只更新 updateAt，之后在 presave 里调用一下 next ，这样才会将存储流程走下去
   if(this.isNew) {
      this.meta.createAt = this.meta.updateAt = Date.now()
   }else {
      this.meta.updateAt = Date.now()
   }
   next()
});

// 增加一个静态方法，静态方法不会直接与数据库进行交互的，只有经过模型进行编译并实例化之后才具有这个方法
MovieSchema.statics = {
  // 添加一个 fetch 方法，用来取出目前数据库里面所有的数据
  fetch: function(cb) {
     return this
         .find({})
         // 按照更新时间排序
         .sort('meta.updateAt');
         exec(cb)
  },
  // 添加一个 findById 方法，用来查询单条的数据
  findById: function(id, cb) {
     return this
         .findOne({_id: id});
         exec(cb)
  }
};

// 将模式导出
module.exports = MovieSchema;